dbmigrate
A tool to create and manage SQL migrations.
Databases supported
- Postgres
- MySQL
- Sqlite
Usage
Using CLI
Every call to dbmigrate requires 2 arguments: database url and migrations folder.
Those can be set through environment variables: DBMIGRATE_URL
and DBMIGRATE_PATH
, using a .env file, or as args to a call. Argument will override an environment variable.
# create a migration file
# apply all non applied migrations
# un-apply all migrations
# redo the last migration
# revert the last migration
# see list of migrations and which one is currently applied
The format of the migration files is the following:
You can also pass a string to create
and dbmigrate will slugify it for you:
# gives the following files
.
(dot) is not allowed in a migration name as it is the filename separator character.
Using the library
Migrations can also be done programmatically and is how the CLI tool is built.
You will need to add the dbmigrate-lib
dependency to your Cargo.toml
file. The best example to see how how to make it work
is to look at the dbmigrate
directory, which uses it to implement the CLI tool.
Test locally
Build the project first with cargo build
.
Assuming you use the docker images in the Makefile for pg and mysql:
Postgres:
MySQL:
For Sqlite I have a Sqlite db named dbmigrate.db
in the repo (gitignored):
Using a different schema
dbmigrate will use the default schema. You can override that from your database URL, for example for Postgres:
--url="postgres://postgres:@127.0.0.1:5432/migrate?application_name=my_app&options=-c search_path%3Dmy_app"
Changelog
Lib
- 0.1.5: update postgres dependencies
- 0.1.4: Use
postgres-native-tls
- 0.1.1: Add features so you can only pick the database you need
CLI
- 0.3.4: Don't crash if the terminal doesn't support colours
- 0.3.3: Don't crash if there is no terminal
- 0.3.2: Use features
- 0.3.1: Refactor code to create a dbmigrate-lib and use it for the dbmigrate tool
- 0.3.0: Add dotenv support + refactor error handling + update dependencies
- 0.2.7: Update docs to mention sqlite support
- 0.2.6: Support Sqlite
- 0.2.5: Update dependencies
- 0.2.4: Do not require DB connection to create migration file and update dependencies
- 0.2.3: don't panic on invalid files in migration folder & ssl support for postgres
- 0.2.2: slugify migration names and check if they are ok
Acknowledgments
This is heavily inspired by https://github.com/mattes/migrate.
License
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.